package com.profgj.profgj.utils;

import com.profgj.profgj.entity.User;
import com.profgj.profgj.entity.UserNotify;
import com.profgj.profgj.service.UserNotifyService;
import com.profgj.profgj.service.UserService;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;

/**
 * 用户通知
 */

/**
 * @Component将该类纳入spring容器中管理
 */
@Component
public class UserNotifyUtils {

    /**
     * 用户服务对象
     */
    @Resource
    private UserService userService;

    /**
     * 用户通知服务
     */
    @Resource
    private UserNotifyService userNotifyService;


    /**
     * 有用户操作添加数据的时候更变该用户的通知状态和添加通知到管理员
     * @param enUserId
     */
    public void changeUserStatus(Integer enUserId) {

        /**
         * 企业用户做添加数据
         */
        // 先通过企业用户id查询该用户下的通知
        UserNotify userNotify = userNotifyService.queryByEnUserId(enUserId);
        // 查询不为空
        if (userNotify != null) {
            // 更变上报标志位0为上报 1已上报
            userNotify.setReport(1);
            userNotify.setRead(1);
            // 填充上报信息
            userNotify.setMessage("本月数据已上报完成");
            // 添加到数据库中
            userNotifyService.update(userNotify);
        } else {
            // 首次为空 添加通知记录
            userNotify = new UserNotify();
            // 设置关联用户的id
            userNotify.setUserId(enUserId);
            // 设置上报标志位0为上报 1已上报
            userNotify.setReport(1);
            userNotify.setRead(1);
            // 设置上报信息
            userNotify.setMessage("本月数据已上报完成");
            // 添加到数据库中
            userNotifyService.insert(userNotify);
        }

        /**
         * 将信息通知管理员
         */
        // 创建通知对象
        UserNotify userNotify_admin_new = new UserNotify();
        // 设置管理员新的一条未读通知
        userNotify_admin_new.setRead(0);
        // 此字段与管理员无关是为了数据库不为Null
        userNotify_admin_new.setReport(0);
        // 设置管理员通知的信息
        userNotify_admin_new.setMessage("企业用户:" + userService.queryById(enUserId).getUsername() + "上报数据完成");

        // 查询用户角色为1的用户集合 所有管理员
        List<User> users = userService.queryUserByRole(1);
        // 每个管理员都设置通知
        for (User user : users) {
            // 设置关联管理员的id
            userNotify_admin_new.setUserId(user.getId());
            // 添加到数据库中
            userNotifyService.insert(userNotify_admin_new);
        }

    }
}
